package ejemplos.semaforo.consumidorProductor;

import semaforo.Semaforo;

/**
 * Esta clase intenta consumir recursos de la filaDeProduccion. Solo lo hara
 * cuando haya recursos disponibles. Llamara al consumidor cada vez que termino
 * de consumir para avisarle que hay una posicion libre.
 * 
 * @author ger
 * 
 */
public class Consumidor extends Thread {

	private Semaforo exclusivo;

	private Semaforo ocupado;

	private Semaforo libre;

	// private Integer contador;

	@Override
	public void run() {
		for (int i = 0; i < 50; i++) {
			ocupado.consumir();
			exclusivo.consumir();
			System.out.println("C" + i + ": IN");
			// Consumo un slot. Cada slot tiene 10000 unidades.
			consumir();
			System.out.println("C" + i + ": OUT");
			exclusivo.liberar();
			libre.liberar();
			try {
				long siesta = (long) (Math.random() * 100);
				System.out.println("C : Dormire por: " + siesta);
				Thread.sleep(siesta);
			} catch (InterruptedException e) {
				// No importa tratar esta exception. Es solo para darle tiempo
				// al otro hilo
			}

		}
	}

	private void consumir() {
		// for (int i = 0; i < 10000; i++) {
		// contador--;
		// }
		// if (contador < 0) {
		// System.err
		// .println("Se consumio mas de lo que habia producido. Contador: "
		// + contador);
		// System.exit(-1);
		// }
		// if (contador % 10000 != 0) {
		// System.err.println("Invadieron espacio restringido!. contador = "
		// + contador);
		// System.exit(-1);
		// }
	}

	public Semaforo getExclusivo() {
		return exclusivo;
	}

	public void setExclusivo(Semaforo exlusivo) {
		this.exclusivo = exlusivo;
	}

	public Semaforo getLibre() {
		return libre;
	}

	public void setLibre(Semaforo libre) {
		this.libre = libre;
	}

	public Semaforo getOcupado() {
		return ocupado;
	}

	public void setOcupado(Semaforo ocupado) {
		this.ocupado = ocupado;
	}

	// public Integer getContador() {
	// return contador;
	// }
	//
	// public void setContador(Integer contador) {
	// this.contador = contador;
	// }
}
